package utils

import (
    "crypto/rand"
    "encoding/hex"
    "github.com/beego/beego/v2/server/web"
)

// 通用工具函数
func GenerateSerialNumber() string {
    bytes := make([]byte, 8)
    rand.Read(bytes)
    return hex.EncodeToString(bytes)
}

func GenerateNGUID() string {
    bytes := make([]byte, 16)
    rand.Read(bytes)
    return hex.EncodeToString(bytes)
}

func GenerateEUI64() string {
    bytes := make([]byte, 8)
    rand.Read(bytes)
    return hex.EncodeToString(bytes)
}

// API响应相关结构和函数
type Response struct {
    Code    int         `json:"code"`
    Message string      `json:"message"`
    Data    interface{} `json:"data,omitempty"`
}

func JSONResponse(c web.Controller, code int, message string, data interface{}) {
    c.Data["json"] = Response{
        Code:    code,
        Message: message,
        Data:    data,
    }
    c.ServeJSON()
}

// SuccessResponse 发送成功响应
func SuccessResponse(c web.Controller, data interface{}) {
    // 设置响应头
    c.Ctx.Output.Header("Content-Type", "application/json; charset=utf-8")
    
    result := map[string]interface{}{
        "code": 200,
        "msg":  "success",
        "data": data,
    }
    
    // 设置数据到context中供中间件使用
    c.Ctx.Input.SetData("json", result)
    
    // 设置响应数据并发送
    c.Data["json"] = result
    c.ServeJSON()
}

// ErrorResponse 发送错误响应
func ErrorResponse(c web.Controller, code int, message string) {
    // 设置响应头
    c.Ctx.Output.Header("Content-Type", "application/json; charset=utf-8")
    c.Ctx.ResponseWriter.WriteHeader(code)
    
    result := map[string]interface{}{
        "code": code,
        "msg":  message,
        "data": nil,
    }
    
    // 设置数据到context中供中间件使用
    c.Ctx.Input.SetData("json", result)
    
    // 设置响应数据并发送
    c.Data["json"] = result
    c.ServeJSON()
}
